package main

import (
	"fmt"
	"math"
	"strings"
	"unicode"
)

func main() {
	//1.整型 int8 int16 int32 int64 uint8 uint16 uint32 uint64
	//2.特殊整型 int uint uintptr
	//3.可以用二、八、十、十六进制表示整型
	var a int = 10
	var b int = 077
	var c int = 0xff
	fmt.Printf("%d \n", a)
	fmt.Printf("%d \n", b)
	fmt.Printf("%d \n", c)

	//4.浮点数 float32 float64
	fmt.Printf("%f \n", math.Pi)
	fmt.Printf("%.2f \n", math.Pi)

	//5.布尔值 false true
	//6.默认值是false
	var d bool
	fmt.Println(d)
	//7.不允许将整型强制转换为布尔型.
	//c = false
	//8.布尔型无法参与数值运算，也无法与其他类型进行转换。
	//var e = c + d

	//9.字符串 内部实现UTF-8 可直接赋值中文 用双引号
	aa := "蔡 鹏 鹏"
	fmt.Println(aa)
	fmt.Println(11, 22)
	//10.转义符 \r \n \t \\ \' \"
	//11.多行字符串
	//反引号间换行将被作为字符串中的换行，所有的转义字符均无效
	bb := `描述
嘿嘿\"
呵呵`
	var cc = aa + bb
	var dd = strings.Split(aa, " ")
	fmt.Println(bb, len(bb), cc, dd)
	var ee = strings.Contains(aa, "蔡")
	fmt.Println(ee)
	bb = "ccc"
	fmt.Println(bb)

	//12.类型转换
	var aaa = 111
	var bbb = 11.1
	var ccc = true
	var ddd = "111"
	fmt.Printf("%T \n", aaa)
	fmt.Printf("%T \n", bbb)
	fmt.Printf("%T \n", ccc)
	fmt.Printf("%T \n", ddd)

	fmt.Printf("%d \n", getCompute())
}

func getCompute() int {
	a := "hello沙河小王子"
	count := 0
	for _, v := range a {
		if unicode.Is(unicode.Han, v) {
			count++
		}
	}
	return count
}
